var _JS_DIR = window.location.href.substring(0, window.location.href.lastIndexOf("/")+1)+"js/";//该js文件所在的目录, 以/结尾

// 删除确定
function confirmdelete() {
	if(!confirm('确定要删除吗?')) {
		return false;
	}
}

function formsubmit($form){
	var params = $form.serialize();
	var url = $form.attr("action");
	if(null==url || ""==url)
		url = window.location.href;
	if(url.indexOf("?")<0) url += "?";
	if(url.charAt(url.length-1)!="&") url += "&";
	url += params;
	$.ajax({
		 type: "GET"
		,async: false
		,url: url
		,dataType: "json"
		,success: function(data){
			if(data.errorcode==0){
				alert("操作成功");
				if(null==data.url || ""==data.url) window.history.back(-1);
				else window.location.href = data.url;
			}
			else{
				alert("操作失败\n"+data.errordesc);
			}
		}
		,error:function (XMLHttpRequest, textStatus, errorThrown) {
			alert("textstatus:"+textStatus+",\nerrorThrown:"+errorThrown);
		}
	});
	return false;
}


/**
 * 扩展输入框. 带模糊搜索, 下拉框等功能
 * 
 * @param $ele
 *            输入(input)框对应的jquery对象.
 * @param getitem
 *            获取条目数据的回调函数, 该函数的特征为function (qstr). 其中qstr为待搜索字符串.
 * @param url
 *            如果不指定getitem(=null), 那么使用默认ajax方式获取数据, 访问地址为url?q=
 */
function extinput($ele, getitem, url, callback_onchange){
	if(null==$ele || 0==$ele.length) return;
	
	var d = new Date();
	d = d.getTime()+""+d.getMilliseconds();
	var canid=$ele.attr("id")+"can"+d;// 候选框的id
	var behindid = $ele.attr("id")+"behind"+d;// 后台框id
	
	// 生成后台框
	$ele.after($("<input type='hidden' id='"+behindid+"' name='"+$ele.attr('name')+"'/>"));
	$behind = $("#"+behindid);
	$ele.removeAttr('name');
	
	// #region 初始化候选框
	var $candiv = null;// 候选框div
	var $cancontainer = null;// 候选框容器
	var $canitem = null;// 候选项
	var clickitem = null; // 当点击候选项触发的方法
	var incandiv = false;// 鼠标是否在候选框内. 用以在输入框失去焦点时是否隐藏候选框
	
	var eleloc = $ele.offset();
	var eleleft = eleloc.left+1;
	var elebot = eleloc.top + $ele.outerHeight();
	var canstyle = "style='"
		+"display:none;"
		+"position:absolute;top:"+elebot+"px;left:"+eleleft+"px;"
		+"width:"+($ele.width()+1)+"px;"
		+"border:solid 1px black;"
		+"background-color:#FFFFFF;"
		+"'";
	var itemstyle = "style='"
		+"list-style-type:none; padding:1px 5px 0px 2px;margin:0;"
		+""
		+"'";
	$('<div id="'+canid+'" '+canstyle+'><ul style="padding:0;margin:0;"><li '+itemstyle+' name="name" svalue="svalue" >value</li></ul></div>').appendTo("body");
	$candiv = $("#"+canid);
	$candiv.mouseenter(function(){
			incandiv = true;
	});
	$candiv.mouseleave(function(){
			incandiv = false;
	});
	$cancontainer = $("ul", $candiv);
	$cancontainer.data("isgotdata", false);// 用于指示是否已获取数据, 防止服务器压力过重
	
	$canitem = $("li", $cancontainer);
	clickitem = function(){ // 点击候选项时触发的处理函数
		$this = $(this);
		var name = $this.attr('name');
		var svalue = $this.attr('svalue');
		var value = $this.text();
		
		if(null!=name && ""!=name){
			$behind.attr('value', name);
			$ele.attr('value', value);
			$candiv.hide();
		}
		callback_onchange();
	};
	// $canitem.click(clickitem);
	$canitem.detach();
	// #endreg 初始化候选框
	
	// 此函数将获得的数据设置到候选框中
	var setitem = function(data){
		if(null==data || ''==data) return;
		
		
		// 首先先删除已有条目
		$("li", $cancontainer).remove();
		
		// 重新生成候选条目
		for(var i=0; i<data.length; ++i){
			var name = data[i]['name'];
			$item = $canitem.clone();
			$item.attr('name', data[i]['name']);
			$item.attr('svalue', data[i]['svalue']);
			$item.text(data[i]['value']);
			$item.click(clickitem);
			
			if(null!=name && ""!=name){
				$item.css("cursor", "pointer");
			}
			$item.appendTo($cancontainer);
		}
		
		$cancontainer.data("isgotdata", true);
		if($candiv.width()<$ele.width()){
			$candiv.width($ele.width());
		}
	};
	
	// 使用默认的ajax方式获取条目
	if(null==getitem && null!=url){
		getitem = function(qstr){// 生成候选条目
			if(null==qstr) qstr = "";
			
			var res = null;
			$.ajax({
				 type: "POST"
				,async: false
				,url: url
				,data: {"q":qstr}
				,dataType: "json"
				,success: function(data){
					res = data;
				}
				,error:function (XMLHttpRequest, textStatus, errorThrown) {
					alert("textstatus:"+textStatus+",\nerrorThrown:"+errorThrown);
				}
			});
			
			return res;
		};
	}
	
	$ele.keyup(function(){
		try{
			var qstr = $ele.attr('value');// 获取查询字符串
			setitem(getitem(qstr));
		}catch(e){}
	});
	$ele.focusout(function(event){ // 输入框失去焦点且焦点不会在候选框里时,隐藏候选框
		// event.preventDefault();
		// event.stopPropagation();
		if(!incandiv) $("#"+canid).hide();
	});
	$ele.click(function(){
		var qstr = $ele.text();// 查询字符串
		if(null==qstr || ""==qstr){
			if(!$($cancontainer).data("isgotdata")){// 如果没有获取过数据, 则获取之
				setitem(getitem(qstr));
			}
		}
		$candiv.show();
	});
}

/**
 * 将日期字符串按指定格式转换成日期
 * 
 * @param formatstr
 *            日期格式
 * @returns
 */
String.prototype.toDate = function(formatstr) {
	var y = this.substring(formatstr.indexOf('y'),formatstr.lastIndexOf('y')+1);// 年
	var m = this.substring(formatstr.indexOf('m'),formatstr.lastIndexOf('m')+1);// 月
	var d = this.substring(formatstr.indexOf('d'),formatstr.lastIndexOf('d')+1);// 日
	var H = this.substring(formatstr.indexOf('H'),formatstr.lastIndexOf('H')+1);// 时
	var M = this.substring(formatstr.indexOf('M'),formatstr.lastIndexOf('M')+1);// 分
	var S = this.substring(formatstr.indexOf('S'),formatstr.lastIndexOf('S')+1);// 秒
	if(isNaN(y)) y = new Date().getFullYear();
	if(isNaN(m)) m = new Date().getMonth();
	if(isNaN(d)) d = new Date().getDate();
	if(isNaN(H)) H = new Date().getHours();
	if(isNaN(M)) M = new Date().getMinutes();
	if(isNaN(S)) S = new Date().getSeconds();
	var dt = new Date(y,m-1,d,H,M,S);
	return dt;
};

/**
 * 将日期按指定格式转换成字符串 yyyymmdd HHMMSS s
 * 
 * @param formatstr
 *            格式化字符串
 */
Date.prototype.format = function(formatstr) {
	if(null==formatstr || ""==formatstr) return this.toString();
	var o = {
			"m+" : this.getMonth() + 1, // month
			"d+" : this.getDate(),      // day
			"H+" : this.getHours(),     // hour
			"M+" : this.getMinutes(),   // minute
			"S+" : this.getSeconds(),   // second
			"w+" : "日一二三四五六".charAt(this.getDay()),   // week
			"q+" : Math.floor((this.getMonth() + 3) / 3),  // quarter
			"s"  : this.getMilliseconds() // millisecond
	};
	if(/(y+)/.test(formatstr)) {
		formatstr = formatstr.replace(RegExp.$1,
				(this.getFullYear() + "").substr(4 - RegExp.$1.length));
	}
	for(var k in o){
		if(new RegExp("("+ k +")").test(formatstr)){
			formatstr = formatstr.replace(RegExp.$1,
					RegExp.$1.length == 1 ? o[k] :
						("00" + o[k]).substr(("" + o[k]).length));
		}
	}
	return formatstr;
};